/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.Ufes.exeSwing.Presenter;

import edu.Ufes.exeSwing.Collection.AgenciaCollection;
import edu.Ufes.exeSwing.View.InclusaoAgenciaView;
import edu.Ufes.exeSwing.Model.Agencia;
import edu.Ufes.exeSwing.Persistence.AgenciaPersistence;
import edu.Ufes.exeSwing.View.ListaAgenciasView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author bhetynnacatalunha
 */
public class AgenciaPresenter {

    InclusaoAgenciaView inclusaoAgenciaView;
    AgenciaCollection agencias;
    ListaAgenciasView listaAgenciasView;
    DefaultTableModel tm;

    public AgenciaPresenter() {

        inclusaoAgenciaView = new InclusaoAgenciaView();
        agencias = new AgenciaCollection(new AgenciaPersistence());
        listaAgenciasView = new ListaAgenciasView();

        inclusaoAgenciaView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvarAgencia();
            }
        });

        inclusaoAgenciaView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoAgenciaView.dispose();
            }
        });

        listaAgenciasView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoAgenciaView.getTxtCidade().setText("");
                inclusaoAgenciaView.getTxtCodigo().setText("");
                inclusaoAgenciaView.setVisible(true);
            }
        });

        listaAgenciasView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listaAgenciasView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaAgenciasView.dispose();
            }
        });

        listaAgenciasView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });

        listaAgenciasView.getBtnPesquisar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });

        carregaAgencias(agencias.getTodasAgencias());

        this.listaAgenciasView.setVisible(true);

    }
    
       public AgenciaPresenter(InclusaoAgenciaView incluirAgencia) {
        inclusaoAgenciaView = incluirAgencia;
        agencias = new AgenciaCollection(new AgenciaPersistence());
        listaAgenciasView = new ListaAgenciasView();

        inclusaoAgenciaView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvarAgencia();
            }
        });

        inclusaoAgenciaView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoAgenciaView.dispose();
            }
        });

        listaAgenciasView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoAgenciaView.getTxtCidade().setText("");
                inclusaoAgenciaView.getTxtCodigo().setText("");
                inclusaoAgenciaView.setVisible(true);
            }
        });

        listaAgenciasView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listaAgenciasView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaAgenciasView.dispose();
            }
        });

        listaAgenciasView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });

        listaAgenciasView.getBtnPesquisar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });

        carregaAgencias(agencias.getTodasAgencias());

        inclusaoAgenciaView.setVisible(true);

    }

    private void carregaAgencias(TreeSet agencias) {
        tm = new DefaultTableModel(new Object[][]{}, new String[]{"Codigo", "Cidade", "UF"}) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tm.setNumRows(0);
        Iterator<Agencia> it = agencias.iterator();
        while (it.hasNext()) {
            Agencia a = it.next();
            String linha = a.toString();
            String valores[] = linha.split("#");
            tm.addRow(valores);


        }
        this.listaAgenciasView.getTblAgencias().setModel(tm);
    }

    private void pesquisar() {
        tm.setNumRows(0);
        TreeSet<Agencia> agencias1 = this.agencias.getTodasAgencias();
        Iterator<Agencia> it = agencias1.iterator();
        while (it.hasNext()) {
            Agencia a = it.next();
            int fim = listaAgenciasView.getTxtFiltrar().getText().length();
            
            String cidade = a.getCidade();
            String filtro = listaAgenciasView.getTxtFiltrar().getText();
            
            if(cidade.length() < fim){
                fim = cidade.length();
            }
            
            if (cidade.substring(0, fim).toUpperCase().equals(filtro.toUpperCase())) {
                String linha = a.toString();
                String valores[] = linha.split("#");
                tm.addRow(valores);
            }


        }
    }

    private void salvarAgencia() {
        Agencia agencia = new Agencia();
        agencia.setCidade(inclusaoAgenciaView.getTxtCidade().getText().toString());
        agencia.setCodigo(inclusaoAgenciaView.getTxtCodigo().getText().toString());
        agencia.setUf(inclusaoAgenciaView.getCmbUFs().getSelectedItem().toString());
        if (agencia.getCidade().isEmpty() || agencia.getCodigo().isEmpty()) {
            JOptionPane.showMessageDialog(inclusaoAgenciaView, "Preencha os campos em Branco");
        } else {
            agencias.excluirAgencia(agencia);
            agencias.incluirAgencia(agencia);
            this.carregaAgencias(agencias.getTodasAgencias());
            inclusaoAgenciaView.dispose();
            JOptionPane.showMessageDialog(listaAgenciasView, "Agencia Salva com Sucesso");

        }
    }

    private void editar() {
        if (listaAgenciasView.getTblAgencias().getSelectedRow() != -1) {
            String codigo = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 0);
            String cidade = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 1);
            String uf = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 2);
            Agencia agencia = new Agencia();
            agencia.setCidade(cidade);
            agencia.setCodigo(codigo);
            agencia.setUf(uf);
            inclusaoAgenciaView.getTxtCidade().setText(cidade);
            inclusaoAgenciaView.getTxtCodigo().setText(codigo);
            inclusaoAgenciaView.getTxtCodigo().setEnabled(false);
            inclusaoAgenciaView.getCmbUFs().setSelectedItem(uf);

            inclusaoAgenciaView.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(listaAgenciasView, "Selecione uma linha");
        }

    }

    private void excluir() {
        if (listaAgenciasView.getTblAgencias().getSelectedRow() != -1) {
            if (JOptionPane.showConfirmDialog(listaAgenciasView, "Deseja mesmo excluir essa Agencia?") == 0) {
                Agencia agencia = new Agencia();
                String codigo = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 0);
                String cidade = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 1);
                String uf = (String) listaAgenciasView.getTblAgencias().getValueAt(listaAgenciasView.getTblAgencias().getSelectedRow(), 2);
                agencia.setCidade(cidade);
                agencia.setCodigo(codigo);
                agencia.setUf(uf);
                agencias.excluirAgencia(agencia);
                this.carregaAgencias(agencias.getTodasAgencias());
                JOptionPane.showMessageDialog(listaAgenciasView, "Agencia excluida com Sucesso!");
            }
        } else {
            JOptionPane.showMessageDialog(listaAgenciasView, "Selecione uma linha");
        }
    }
}
